package dados;

import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

/**
 * Classe anotacao
 */

public class Anotacao implements Serializable,Comparable<Anotacao>{
	private static final long serialVersionUID = 1L;
	private String note, data, hora;
	
	/**
	 * Construtor
	 * @param anotacao
	 */
	public Anotacao(String anotacao){
		note = anotacao;
		data = getDataAtual();
		hora = getHoraAtual();
	}
	
	/**
	 * Fornece a data da criacao da anotacao ou da ultima modificacao
	 * @return data
	 */
	public String getData() {
		return data;
	}

	/**
	 * Fornece a hora da criacao da anotacao ou da ultima modificacao
	 * @return hora
	 */
	public String getHora() {
		return hora;
	}

	/*
	 * Pega a data atual do sistema e o retorna como um String
	 */
	private String getDataAtual(){
		return new SimpleDateFormat("dd.MM.yyyy").format(new Date());
	}
	
	/*
	 * Pega a hora atual do sistema e o retorna como um String
	 */
	private String getHoraAtual(){
		GregorianCalendar gc = new GregorianCalendar();
		return String.format("%02d:%02d",gc.get(Calendar.HOUR),+gc.get(Calendar.MINUTE));
	}
	
	/**
	 * Fornece o conteudo da anotacao
	 * @return anotacao
	 */
	public String getNote() {
		return note;
	}

	/**
	 * Modifica o conteudo da anotacao
	 * @param note
	 */
	public void setNote(String note) {
		this.hora = getHoraAtual();
		this.data = getDataAtual();
		this.note = note;
	}
	
	private int comparaDataeHora(String data1,String hora1,String data2,String hora2){
		if (data1.length()== 10 && data2.length()==10){
			if (!(data1.substring(6).equals(data2.substring(6)))){
				return - Integer.parseInt(data2.substring(6)) + Integer.parseInt(data1.substring(6));
			}
		}
		if (!(data1.substring(3,5).equals(data2.substring(3,5)))){
			return - Integer.parseInt(data2.substring(3,5)) + Integer.parseInt(data1.substring(3,5));
		}
		if (!(data1.substring(0,2).equals(data2.substring(0,2)))){
			return - Integer.parseInt(data2.substring(0,2)) + Integer.parseInt(data1.substring(0,2));
		}
		if (!(hora1.substring(0,2).equals(hora2.substring(0,2)))){
			return - Integer.parseInt(hora2.substring(0,2)) + Integer.parseInt(hora1.substring(0,2));
		}
		if (!(hora1.substring(3).equals(hora2.substring(3)))){
			return - Integer.parseInt(hora2.substring(3)) + Integer.parseInt(hora1.substring(3));
		}
		return 0;
	}
	
	
	
	/**
	 * Representa na forma de string uma anotacao
	 */
	@Override
	public String toString() {
		return getNote()+", criado em "+getData()+" às "+getHora();
	}

	@Override
	public int compareTo(Anotacao other) {
		return comparaDataeHora(getData(), getHora(), other.getData(), other.getHora());
	}

}
